﻿using AutoMapper;
using AutoMapper.Internal.Mappers;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using wangyaxin.Models;
using wangyaxin.Wang.Dto;

namespace wangyaxin.Web
{
    public class HomeController : Controller
    {

        private readonly IRepository<WangUser, int> _WangUserRepository;

        private readonly IMapper _mapper; // 依赖注入 IMapper
       
        public HomeController(IRepository<WangUser, int> WangUserRepository, IMapper mapper)
        {
            _WangUserRepository = WangUserRepository;
            _mapper = mapper;
        }

        public IActionResult Index()
        {
            return View();
        }


        public IActionResult Default()
        {
            return View();
        }


        public IActionResult DefaultAdd()
        {
            return View();
        }


        public IActionResult DefaultUpdate()
        {
            return View();
        }


        public async Task<string> AddWangUser(WangUserDTO input)
        {
            var wang = new WangUser
            {
                Name = input.Name,
                Passage = input.Passage,
            };

            await _WangUserRepository.InsertAsync(wang);

            // 将返回格式统一
            var userDto = _mapper.Map<WangUser, WangUserDTO>(wang);
            return JsonConvert.SerializeObject(new PageDto<WangUserDTO>
            {
                code = "", // 可以根据需要设置状态码
                data = new List<WangUserDTO> { userDto }, // 返回添加的用户信息
                msg = "添加成功", // 可以根据需要添加消息
                count = 1 // 添加的用户数量
            });
        }


        public async Task<string> DeleteWangUser(int id)
        {
            // 根据 ID 查找用户
            var wangUser = await _WangUserRepository.GetAsync(id);
            if (wangUser == null)
            {
                return JsonConvert.SerializeObject(new PageDto<WangUserDTO>
                {
                    code = "404", // 用户未找到
                    data = null, // 没有返回数据
                    msg = "用户未找到", // 错误消息
                    count = 0 // 用户数量
                });
            }

            // 删除用户
            await _WangUserRepository.DeleteAsync(wangUser);

            // 返回统一格式
            return JsonConvert.SerializeObject(new PageDto<WangUserDTO>
            {
                code = "200", // 成功状态码
                data = null, // 没有返回数据
                msg = "删除成功", // 成功消息
                count = 1 // 删除的用户数量
            });
        }



        public async Task<string> RestoreWangUser(int id)
        {
            // 根据 ID 查找被删除的用户
            var wangUser = await _WangUserRepository.GetAsync(id);
            if (wangUser == null)
            {
                return JsonConvert.SerializeObject(new PageDto<WangUserDTO>
                {
                    code = "404", // 用户未找到
                    data = null, // 没有返回数据
                    msg = "用户未找到或未被删除", // 错误消息
                    count = 0 // 用户数量
                });
            }

             var userDto = _mapper.Map<WangUser, WangUserDTO>(wangUser);
            return JsonConvert.SerializeObject(new PageDto<WangUserDTO>
            {
                code = "", // 可以根据需要设置状态码
                data = new List<WangUserDTO> { userDto }, // 返回添加的用户信息
                msg = "添加成功", // 可以根据需要添加消息
                count = 1 // 添加的用户数量
            });
        }



        public async Task<string> UpdateWangUser(int id, WangUserDTO updatedUser)
        {
            // 根据 ID 查找用户
            var wangUser = await _WangUserRepository.GetAsync(id);
            if (wangUser == null)
            {
                return JsonConvert.SerializeObject(new PageDto<WangUserDTO>
                {
                    code = "404", // 用户未找到
                    data = null, // 没有返回数据
                    msg = "用户未找到", // 错误消息
                    count = 0 // 用户数量
                });
            }

            // 更新用户信息
            wangUser.Name = updatedUser.Name;
            wangUser.Passage = updatedUser.Passage;
            // 你可以根据需要更新其他属性

            await _WangUserRepository.UpdateAsync(wangUser);

            // 返回统一格式
            return JsonConvert.SerializeObject(new PageDto<WangUserDTO>
            {
                code = "200", // 成功状态码
                data = null, // 没有返回数据
                msg = "更新成功", // 成功消息
                count = 1 // 更新的用户数量
            });
        }









    }
}
